package cn._2dland.uploader.xina;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.commons.codec.binary.Base64;

import cn._2dland.uploader.utils.EncodeUtils;
import cn._2dland.uploader.utils.RSA;

/**
 * 渣浪工具类
 * 
 * @author deadblue
 */
public class XinaUtils {
	/**
	 * 编码用户名
	 * 
	 * @param usermame
	 * @return
	 */
	public static String encodeUsername(String username) {
		String str = null;
		try {
			str = URLEncoder.encode(username, "utf-8");
			str = Base64.encodeBase64String(str.getBytes());
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		return str;
	}

	/**
	 * 编码密码
	 * 本方法已经作废，渣浪已经换RSA加密了
	 * 
	 * @deprecated
	 * @param password
	 * @param serverTime
	 * @param nonce
	 * @return
	 */
	public static String encodePassword(String password, String serverTime, String nonce) {
		String str = null;
		str = EncodeUtils.hexSHA1(EncodeUtils.hexSHA1(password));
		str = new StringBuffer(str).append(serverTime).append(nonce).toString();

		return EncodeUtils.hexSHA1(str);
	}

	/** 公钥的指数 */
	private static String RSA_PUBLIC_EXPONENT = "10001";

	/**
	 * 新密码编码方法
	 * 
	 * @param publicKey 公钥
	 * @param serverTime 服务器时间
	 * @param nonce 鬼知道是啥
	 * @param password 密码
	 * @return
	 */
	public static String encodePassword(String password, String publicKey, String serverTime, String nonce) {
		// 构造RSA对象
		RSA rsa = new RSA(publicKey, RSA_PUBLIC_EXPONENT);

		// 待加密数据
		StringBuffer buf = new StringBuffer();
		buf.append(serverTime).append("\t").append(nonce)
			.append("\n").append(password);

		// 加密
		byte[] enBytes = null;
		try {
			enBytes = rsa.encrypt(buf.toString().getBytes("utf-8"));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		// 将结果转换为16进制，并返回
		buf = new StringBuffer();
		for(int i = 0; i < enBytes.length; i++) {
			buf.append(EncodeUtils.byte2Hex(enBytes[i]));
		}

		return buf.toString();
	}

}